
fileName=input("请输入文件名:")
oldLines=[]
newLines=[]
blockCom=False
lineCom=False
'''
1.读出文件各行数据存入oldLines 
'''
with open(fileName,'r') as f:
    oldLines=f.readlines()
'''
2. 以行为单位进行判断与处理
'''
for index,oldline in enumerate(oldLines):
    #2.1初始化部分
    oldline.strip('\n') #只会删除尾部的\n 而不会删除诸如printf语句中的\n  
    lineCom=False       #每次开始遍历新行前 都将行注释初始化为False
    #2.2 在块注释内 
    if blockCom:        #则只需要检测本行是否有块注释结束标志
       bcEFind=oldline.find("*/")
       if bcEFind>-1: #[bug]*/之后本行代码未检测
           if len(oldline[bcEFind+2:]):         #如果提出的字符串不为空 则加入新行
                newLines.append(oldline[bcEFind+2:])
                blockCom=False
                print("块注释结束")
       else:            #没找到则本行依然过滤
           continue
    else:    
	    #若不在块注释内 每次对本行进行一次注释开始点查找
	    bcFind=oldline.find("/*")
	    lnFind=oldline.find("//")                     
	    #先找到了/* 或者只找到了/*  开启块注释模式
	    if (bcFind<lnFind and bcFind != -1) or (bcFind!=-1 and lnFind==-1): 
            blockCom=True
            print("块注释开始")
	        bcEFind=oldline.find("*/") #但块注释的结尾可能出现在同一行的 所以需要在本行就开始检测*/ [bug]*/之后本行代码未检测
	        if bcEFind>bcFind:         #此处大于表明了 */出现在/*后边  若没找到*/(-1) 或找到了但是在/*之前 都是无用的
	            newLines.append(oldline[:bcFind]+oldline[bcEFind+2:])
	            blockCom=False
                print("块注释结束")
	        elif bcEFind>-1:          # 另外地 在非注释内容的前提下 若同一行中 */出现在了/*前 应该被判定为error! 
	            newLines.append("error!")
	        elif bcEFind==-1 and len(oldline[:bcFind]):      #表明没找到*/ 同时提取出的字符串不为空 
	            newLines.append(oldline[:bcFind])    #本行没有*/ 则直接截取注释前的内容作为新行内容

	    #先找到了// 或者只找到了//   开启行注释模式
	    elif (lnFind<bcFind and bcFind<>-1) or (lnFind<>-1 and bcFind==-1):         
	        lineCom=True
            print("行注释开始")
	        if lnFind:              #lnFind不为0 即不是本行开始找到   截取本行注释前的内容作为新行内容
	            newLines.append(oldline[:lnFind])
            print("行注释结束")
	    elif lnFind==bcFind:        #//和/*不可能同一位置出现 只可能是二者均没找到 即为-1
	        newLines.append(oldline)       #将本行内容完整加入到新行中

#3.到文件结束 行注释都没匹配到结束 则输出error
if blockCom:
    newLines.append("error!")
    
#4.写结果
with open('output.txt','w') as f:
    for line in newLines:
        f.write(line+"\n")
